上一篇已經完成Tag分類部分
只剩下模糊搜尋以及tableView顯示
這篇就來把剩下的完成
這裡標題使用NSPredicate
因為OC好像可以使用NSPredicate達成目標Swift好像不行
可能要使用filterfilter可以用特定自去搜尋你所傳的文字
比如 我今天要洗澡打球睡覺contains 睡覺 的話
就可以找到本文內有睡覺
let ary = ["我要吃飯","打球","我今天要洗澡打球睡覺","睡覺"]
let resultAry = ary.filter {
(str) -> Bool in return
str.contains("睡覺")
}
print(resultAry)
打印出來可以找到所有有睡覺的文字字串
並且儲存在陣列裡面
["我今天要洗澡打球睡覺", "睡覺"]
這樣可以找字串就方便多了
可以把我們上一篇的Tag拿來找Tag地下的文字都拿來找過一遍
找到的就存在陣列
並且顯示在tableView
let strokeStr = [strokeStr]
for i in objectArray.indices {
for j in objectArray[i].sectionObjects.indices {
// 搜尋所有Tag底下的文字
let resultAry = strokeStr.filter {
(str) -> Bool in return
str.contains(objectArray[i].sectionObjects[j])
}
// 如果有找到符合的話執行
if resultAry.count > 0 {
if (filterArr[objectArray[i].sectionName] != nil) {
var arr = filterArr[objectArray[i].sectionName]
// 去除重複行程
for k in arr!.indices {
if arr![k] == objectArray[i].sectionObjects[j] {
return
}
}
// 新增行程
arr?.append(objectArray[i].sectionObjects[j])
filterArr.updateValue(arr!, forKey: objectArray[i].sectionName)
}else{
// 創立Tag Key 並且 新增行程
let arr = [objectArray[i].sectionObjects[j]]
filterArr.updateValue(arr, forKey: objectArray[i].sectionName)
}
}
}
}
完成以後就可以幫忙分類
單純分類而已
Demo
接下來處理已完成項目
使用上次的Alert事件
當按下確認以後
將array的行程remove
並且updateValue
然後reload TableView
// 建立[確認]按鈕
let okAction = UIAlertAction(
title: "確認",
style: .default,
handler: {
(action: UIAlertAction!) -> Void in
var arr = self.filterArr[self.tableArr[indexPath.section].sectionName]
arr?.remove(at: indexPath.row)
self.filterArr.updateValue(arr!, forKey: self.tableArr[indexPath.section].sectionName)
self.tableArrInit()
})
alertController.addAction(okAction)
Demo
全部就設置完畢了
來Demo全部流程
新增什麼文字
會分類到哪個Tag

以前沒有的Tag可以直接輸入新增
一樣會幫忙新增

使用以下文字
個人有個小癖好 主要是因為本人有隨手記錄文字的習慣 但很多詞會重複、想要這個程式 擁有分類功能的並且可以自動分類我寫的詞屬於哪一個檔案 譬如我輸入「寫功課 洗衣服 看影片」按下更新之後就能將寫功課-歸類為課業 洗衣服歸類為待做事項、看影片歸類為娛樂. 假如我輸入「洗衣服 寫功課 看影片 寫功課」按下更新後自動屏蔽重複的字眼、只保留一次即可、詞語詞以空格為界 假如打錯字則將辨識不了的詞語顯示出來手動辨識
會自動去我的Tag做分類

這邊輸入重複的行程
以及沒重複的看結果

點選TableView跳出Alert
確認後刪除該Cell

以上大概是這次練習
寫成很急促雖然UI很醜
但是功能大部分自己都還算滿意